In [1]:
import sys
print('Python:', sys.version)
import pandas as pd
print('Pandas:', pd.__version__)
import requests
print('Requests:', requests.__version__)
V pandas existuje způsob jak pracovat s datem a celkově kalendářem. Lze např. podle připraveného kalendáře filtrovat data a provádět tzv. analýzu sezónnosti. V tomto článku se zaměřím, jak na získání seznamu státních svátku v US pro dané časové období.
Funkcionalita svátků v pandas lze udělat pomocí Holidays / Holiday Calendars, která využívá třídy AbstractHolidayCalendar z modulu pandas.holiday. Modul pandas.holiday mimo jiné obsahuje nějaké předdefinované typy US svátků.
Pro vytvoření seznamu US svátků jednoduše rozšířím třídu AbstractHolidayCalendar o svůj vlastní seznam svátků v atributu třídy s názvem rules. Pokud chci přidat do seznamu vlastní svátek, který není defaultně v modulu pandas.holiday, můžu si ho vytvořit pomocí třídy pandas.holiday.Holiday.
Příklad vytváření seznamu US svátků:
In [2]:
import datetime as dt
from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday, nearest_workday, \
USMartinLutherKingJr, USPresidentsDay, GoodFriday, USMemorialDay, \
USLaborDay, USThanksgivingDay
class USTradingCalendar(AbstractHolidayCalendar):
rules = [
Holiday('NewYearsDay', month=1, day=1, observance=nearest_workday),
USMartinLutherKingJr,
USPresidentsDay,
GoodFriday,
USMemorialDay,
Holiday('USIndependenceDay', month=7, day=4, observance=nearest_workday),
USLaborDay,
USThanksgivingDay,
Holiday('Christmas', month=12, day=25, observance=nearest_workday)
]
def get_trading_close_holidays(date_from, date_to):
inst = USTradingCalendar()
return inst.holidays(date_from, date_to)
In [3]:
date_from = dt.datetime(2015, 1, 1)
date_to = dt.datetime(2020, 12, 31)
holidays = get_trading_close_holidays(date_from, date_to)
holidays
Out[3]:
Krom modulu pandas.holiday, je možno použít stažení tabulky dat pomocí knihovnz requests a pandas.read_html například z webu CME https://www.cmegroup.com/tools-information/holiday-calendar.html, popřípadě i z Wikipedie - https://en.wikipedia.org/wiki/Public_holidays_in_the_United_States. Bohužel takto stažená data se musí ještě ručně upravit a přeparsovat.
Příklad získání US státních svátků z CME:
In [4]:
CME_HOLIDAY_CALENDAR_URL = 'https://www.cmegroup.com/tools-information/holiday-calendar.html'
import pandas as pd
import requests
r = requests.get(CME_HOLIDAY_CALENDAR_URL)
holiday_calendar = pd.read_html(r.text)[0]
holiday_calendar
Out[4]:
In [5]:
dates = holiday_calendar['Includes the following dates:']
dates
Out[5]:
Parsováním dat se v dnešním článku zabývat nebudu.
Státní svátky i pro jiné země je možné získat pomocí open source package python-holidays, dostupné na githubu: https://github.com/dr-prodigy/python-holidays. Tohle ale vyžaduje instalaci dalšího package a ve zdrojích se právě US svátky stahují a parsují právě z Wikipedie (holidays v0.9.10).